// ----http----
// api URL
let apiUrl = 'https://mp-test.gemoglobal.cn/api'; //公共的请求地址（测试接口）
// apiUrl = 'https://mp.gemoglobal.cn/api'; //正式接口 

//不用管↓，不影响，防止线上出问题+我在其它页面有用，需要测试就在上面按原来的写法改就行了（体验版看正式就解锁第四行，也可以直接提审）
const ENV = wx.getAccountInfoSync().miniProgram.envVersion;
const ApiConfig = {
  develop: "https://api.omnimkt.com/gemo",
  trial: 'https://mp-test.gemoglobal.cn/api',
  release: 'https://mp.gemoglobal.cn/api'
}
console.log(`当前小程序版本：${ENV}`);
// apiUrl = ApiConfig.develop;// 临时-遥本地测试
if (ENV == 'release') apiUrl = ApiConfig.release;//正式环境强制修正接口地址
if (apiUrl != ApiConfig.release) console.warn(`注：当前不是正式环境接口，api为：${apiUrl}`);
else console.warn(`注：当前是正式环境接口`);

let timer = null;

// 封装微信请求方法
const request = (params) => {
  // params.data && (params.data.openid = wx.getStorageSync('openid'))
  let url = params.url
  let data = params.data || {}
  let method = params.method || 'POST'
  let is_wx_login = params.is_wx_login || 1
  let header = {
    'Content-Type': 'application/json',
  }

  let timestamp = new Date().getTime()
  let expires_in = wx.getStorageSync('expires_in')
  // 鉴权验证，获取登录之后后端返回的token，存在即在头部Authorization写token，具体的看后端需求
  if (wx.getStorageSync('access_token') && expires_in >= timestamp) {
    header.Authorization = wx.getStorageSync('access_token')

    console.log(data, '接口入参')
    return new Promise((resolve, reject) => {
      sendRequest(url, data, header, method, params)
        .then((res) => {
          resolve(res)
        })
        .catch((err) => {
          reject(err)
        })
    })
  } else {
    // console.log(data,'接口入参')
    return new Promise((resolve, reject) => {
      sendRequest(url, data, header, method, params)
        .then((res) => {
          resolve(res)
        })
        .catch((err) => {
          reject(err)
        })
    })
  }
}

// 发送请求
const sendRequest = (url, data, header, method, params) => {
  return new Promise((resolve, reject) => {
    wx.request({
      url: apiUrl + url, // api url
      method: method, // get/post
      data: data, // 请求参数
      header: header, // 头部
      success(re) {
        console.log(re, '请求成功')
        // 请求成功
        // 判断状态码---errCode状态根据后端定义来判断
        if (re.statusCode < 399) {
          // 判断接口返回的状态码
          if (re.data.code === 401) {//|| re.data.code === 500
            // token过期
            getLoginInfo(data, header)
              .then(() => {
                // 如果登录成功，重新请求接口
                request(params)
                  .then((res) => {
                    resolve(res)
                  })
                  .catch((err) => {
                    console.log(err)
                  })
              })
              .catch((err) => {
                // 登录失败
                console.log(err)
              })
          } else {
            // 其他状态码
            resolve(re.data)
          }
        } else {
          // 其他异常
          switch (re.statusCode) {
            case 404:
              wx.showToast({
                title: '未知异常',
                duration: 2000,
              })
              break
            default:
              break
          }
          reject('未知错误,请稍后再试')
        }
      },
      fail(er) {
        if (er.errMsg.indexOf('request:fail') !== -1) {
          wx.showToast({
            title: '网络异常',
            icon: 'error',
            duration: 2000,
          })
        } else {
          wx.showToast({
            title: '未知异常',
            icon: 'error',
            duration: 2000,
          })
        }
        reject(er)
      },
      complete() {
        // wx.hideLoading()
      },
    })
  })
}

/**
 *
 * @param { * } data  params.data 接口入参
 * @returns
 */
const getLoginInfo = (data, header) => {
  return new Promise((resolve, reject) => {
    // wx.showLoading();
    wx.login({
      success: (wx_res) => {
        let malogin_data = { jsCode: wx_res.code }
        if (data.inviterId) {
          malogin_data.inviterId = data.inviterId
        }
        wx.request({
          url: apiUrl + '/auth/malogin', // api url
          method: 'GET', // get/post
          data: malogin_data, // 请求参数
          header: header, // 头部
          success(res) {
            if (res.data.code == 200) {
              let new_access_token = res.data.data.access_token
              let new_expires_in = res.data.data.expires_in
              wx.setStorageSync('access_token', new_access_token)
              let new_timestamp =
                new Date().getTime() + (new_expires_in * 60 * 1000) / 1.5
              wx.setStorageSync('expires_in', new_timestamp)
              resolve(res)

         

            }
          },
          fail(err) {
            reject(err)
          },
          complete() {
            // wx.hideLoading();
          }
        })
      },
      fail: (err) => {
        reject(err)
        // wx.hideLoading();
      },
    })
  })
}

module.exports = {
  ApiConfig,
  apiUrl,
  request,
}
